#!/usr/bin/python3
# -*- coding:utf-8 -*-

import pandas as pd
import os
import sys
import json
import win32com.client


def close_excel_by_path(file_path):
    # 获取Excel应用程序的实例
    excel_app = win32com.client.Dispatch("Excel.Application")
    # 遍历打开的工作簿
    for wb in excel_app.Workbooks:
        # 检查工作簿的绝对路径是否与指定的文件路径匹配
        if wb.FullName.lower() == file_path.lower():
            # 如果匹配，关闭工作簿
            wb.Close(SaveChanges=False)
            break
    # 退出Excel应用程序
    excel_app.Quit()
    

# 检查命令行参数的数量
if len(sys.argv) < 2:
    print("使用方法: python script.py json_file_path column1 column2 column3 ...")
    sys.exit(1)

# 第一个参数是脚本名称，所以我们从第二个参数开始获取 JSON 文件路径
json_file_path = sys.argv[1]

# 剩余的参数是列名
column_names = None
if len(sys.argv) > 2:
    column_names = sys.argv[2:]
    
# 假设JSON数据存储在名为data.json的文件中
json_file_path = 'data.json'

# 从文件中读取JSON字符串
with open(json_file_path, 'r', encoding='utf-8') as file:
    file_content = file.read()

json_start_pos = file_content.find('{')
if json_start_pos != -1:
    json_str = file_content[json_start_pos:]
    
# 将JSON字符串转换为Python字典
data = json.loads(json_str)
# 检查是否有错误号并且结果集不为空
if data or data['error_no'] != 0:
    # 从字典中提取results数组
    results = data['results']
    # 将results数组转换为DataFrame
    if column_names is None:
        df = pd.DataFrame(results)
    else:
        df = pd.DataFrame(results, columns=column_names)
    
    # 将DataFrame保存为Excel文件
    excel_path = 'temp.xlsx'
    close_excel_by_path(excel_path)
    df.to_excel(excel_path, index=False)
    
    # 获取Excel文件的绝对路径
    abs_excel_path = os.path.abspath(excel_path)
    # 打开Excel文件
    # 注意：这里的命令取决于你的操作系统和安装的Excel程序
    if os.name == 'nt':  # 对于Windows
        os.system(f'start excel "{abs_excel_path}"')
    elif os.name == 'posix':  # 对于macOS
        os.system(f'open -a Microsoft\ Excel "{abs_excel_path}"')
    # 对于Linux，你可能需要根据你的系统和安装的程序进行调整
else:
    print("数据错误或结果集为空")